package main

// 两数之和
// 给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出 和为目标值 target  的那 两个 整数，并返回它们的数组下标。
//
//你可以假设每种输入只会对应一个答案，并且你不能使用两次相同的元素。
//
//你可以按任意顺序返回答案。

func twoSum(nums []int, target int) []int {
	// 思路：第一遍先计算每个元素所需的值存入map，第二遍直接将元素与所需值对比
	needNums := make(map[int]int) // [needNum => index]

	// 第二遍遍历
	for i, num := range nums {
		if _, ok := needNums[num]; ok {
			// 找到答案，直接返回
			return []int{i, needNums[num]}
		} else {
			// 把新答案存入map
			needNums[target-num] = i
		}
	}
	return []int{}
}

func main() {

}
